require 'set'
require_relative 'secuencia_fonetica'

class AnalizadorFonetico

	def initialize(preprocesadores, estrategias_de_reemplazo)
		@preprocesadores = preprocesadores
		@estrategias_de_reemplazo = estrategias_de_reemplazo
	end

	def posibles_secuencias_foneticas(comentario)
		resultado_preprocesamiento = comentario

		@preprocesadores.each do |preprocesador|
			resultado_preprocesamiento = preprocesador.preprocesar(resultado_preprocesamiento)
		end

		secuencias = Set.new([SecuenciaFonetica.new(resultado_preprocesamiento)])

		@estrategias_de_reemplazo.each do |estrategia|
			secuencias_a_agregar = Set.new
			
			secuencias.each do |secuencia|
				secuencias_a_agregar = secuencias_a_agregar.union(estrategia.alteraciones_posibles(secuencia))
			end

			secuencias = secuencias.union(secuencias_a_agregar)
		end

		return secuencias.to_a
	end

end